package gps.monitor.jt809server.protocol.model;

import gps.monitor.jt809server.protocol.Jt809ParseException;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import lombok.Data;

/**
 * @author cyq
 * @date 2021/11/7
 * @desc talk is cheep,show me the code
 */
@Data
public final class Jt809MessageHeader {

    /*
    数据类型
    Time_t 64 位无符号整型，8 字节
    BYTE 单字节
    BYTES 多字节
    Octet String 定长字符串，位数不够，若补十六进制 0x00,汉字采用 GBK 编码
    Unit16_t 16 位无符号整型，2 字节
    Unit32_t 32 位无符号整型，4 字节
     */
    /*
    字段                 类型        描述及要求
    MSG LENGTH          Unit32_t    数据长度(包括头标识、数据头、数据体和尾标识)
    MSG_SN              Unit32_t    报文序列号 占用四个字节，为发送信息的序列号，用于接收方检测是否有信息的丢失，上级平台
                                    和下级平台接自己发送数据包的个数计数，互不影响。程序开始运行时等于零，发送第一帧
                                    数据时开始计数，到最大数后自动归零。
    MSG_ID              Unit16_t    业务数据类型
    MSG_GNSSCENTERID    Unit32_t    下级平台接入码，上级平台给下级平台分配唯一标识码。
    VERSION_FLAG        BYTES(3)    协议版本好标识，上下级平台之间采用的标准协议版
                                    编号；长度为 3 个字节来表示，0x01 0x02 0x0F 标识
                                    的版本号是 v1.2.15，以此类推。
    ENCRYPT_FLAG        BYTE        报文加密标识位 0 表示报文不加密，1 表示报文加密。
                                    用来区分报文是否进行加密，如果标识为 1，则说明对后继相应业务的数据体采用
                                    ENCRYPT_KEY 对应的密钥进行加密处理。如果标识为 0，则说明不进行加密处理
    ENCRYPT_KEY         Unit32_t    数据加密的密匙，长度为 4 个字节。

     */
    /*
        header 字段
     */
    private int msgLength;
    private int msgSn;
    private int msgId;
    private long msgGnssCenterId;
    private String versionFlag; //hex
    private byte encryptFlag;
    private long encryptKey;
}
